using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools
{
    /// <summary>
    /// <para>Distance From Point</para>
    /// <para>Determine whether entities in a layer are within a certain distance of a coordinate location.</para>
    /// <para>确定图层中的图元是否在坐标位置的特定距离内。</para>
    /// </summary>    
    [DisplayName("Distance From Point")]
    public class DistanceFromPoint : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DistanceFromPoint()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_point_features">
        /// <para>Input Points</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_input_coordinate_type">
        /// <para>Coordinate Type</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>Decimal Degrees - Longitude first—Decimal Degrees - Longitude first. This is the default.</bullet_item><para/>
        ///     <bullet_item>Decimal Degrees - Latitude first—Decimal Degrees - Latitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Minutes Seconds - Longitude first—Degrees Minutes Seconds - Longitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Minutes Seconds - Latitude first—Degrees Minutes Seconds - Latitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Decimal Minutes - Longitude first—Degrees Decimal Minutes - Longitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Decimal Minutes - Latitude first—Degrees Decimal Minutes - Latitude first</bullet_item><para/>
        ///     <bullet_item>Military Grid Reference System—Military Grid Reference System notation</bullet_item><para/>
        ///     <bullet_item>US National Grid—US National Grid notation</bullet_item><para/>
        ///     <bullet_item>Universal Transverse Mercator—Universal Transverse Mercator notation</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>十进制度 - 经度在前 - 十进制度 - 经度在前。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>十进制度 - 纬度优先 - 十进制度 - 纬度优先</bullet_item><para/>
        ///     <bullet_item>度 分 秒 - 经度 第一 - 度 分 秒 - 经度 在前</bullet_item><para/>
        ///     <bullet_item>度 分 秒 - 纬度 第一 - 度 分 秒 - 纬度 第一</bullet_item><para/>
        ///     <bullet_item>度十进制分钟 - 经度优先 - 度十进制分钟 - 经度优先</bullet_item><para/>
        ///     <bullet_item>十进制度分 - 纬度优先 - 度十进制分钟 - 纬度优先</bullet_item><para/>
        ///     <bullet_item>军用格网参考系 - 军用格网参考系符号</bullet_item><para/>
        ///     <bullet_item>美国国家电网 - 美国国家电网表示法</bullet_item><para/>
        ///     <bullet_item>通用横轴墨卡托 - 通用横轴墨卡托符号</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_input_coordinate_string">
        /// <para>Coordinate Location</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_input_search_distance">
        /// <para>Distance</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public DistanceFromPoint(object _input_point_features, _input_coordinate_type_value _input_coordinate_type, object _input_coordinate_string, string? _input_search_distance)
        {
            this._input_point_features = _input_point_features;
            this._input_coordinate_type = _input_coordinate_type;
            this._input_coordinate_string = _input_coordinate_string;
            this._input_search_distance = _input_search_distance;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "Distance From Point";

        public override string CallName => "intelligence.DistanceFromPoint";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_input_point_features, _input_coordinate_type.GetGPValue(), _input_coordinate_string, _input_search_distance, _input_search_expression, _output_id_list];

        /// <summary>
        /// <para>Input Points</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Points")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_point_features { get; set; }


        /// <summary>
        /// <para>Coordinate Type</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>Decimal Degrees - Longitude first—Decimal Degrees - Longitude first. This is the default.</bullet_item><para/>
        ///     <bullet_item>Decimal Degrees - Latitude first—Decimal Degrees - Latitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Minutes Seconds - Longitude first—Degrees Minutes Seconds - Longitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Minutes Seconds - Latitude first—Degrees Minutes Seconds - Latitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Decimal Minutes - Longitude first—Degrees Decimal Minutes - Longitude first</bullet_item><para/>
        ///     <bullet_item>Degrees Decimal Minutes - Latitude first—Degrees Decimal Minutes - Latitude first</bullet_item><para/>
        ///     <bullet_item>Military Grid Reference System—Military Grid Reference System notation</bullet_item><para/>
        ///     <bullet_item>US National Grid—US National Grid notation</bullet_item><para/>
        ///     <bullet_item>Universal Transverse Mercator—Universal Transverse Mercator notation</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>十进制度 - 经度在前 - 十进制度 - 经度在前。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>十进制度 - 纬度优先 - 十进制度 - 纬度优先</bullet_item><para/>
        ///     <bullet_item>度 分 秒 - 经度 第一 - 度 分 秒 - 经度 在前</bullet_item><para/>
        ///     <bullet_item>度 分 秒 - 纬度 第一 - 度 分 秒 - 纬度 第一</bullet_item><para/>
        ///     <bullet_item>度十进制分钟 - 经度优先 - 度十进制分钟 - 经度优先</bullet_item><para/>
        ///     <bullet_item>十进制度分 - 纬度优先 - 度十进制分钟 - 纬度优先</bullet_item><para/>
        ///     <bullet_item>军用格网参考系 - 军用格网参考系符号</bullet_item><para/>
        ///     <bullet_item>美国国家电网 - 美国国家电网表示法</bullet_item><para/>
        ///     <bullet_item>通用横轴墨卡托 - 通用横轴墨卡托符号</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinate Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _input_coordinate_type_value _input_coordinate_type { get; set; }

        public enum _input_coordinate_type_value
        {
            /// <summary>
            /// <para>Decimal Degrees - Longitude first</para>
            /// <para>Decimal Degrees - Longitude first—Decimal Degrees - Longitude first. This is the default.</para>
            /// <para>十进制度 - 经度在前 - 十进制度 - 经度在前。这是默认设置。</para>
            /// </summary>
            [Description("Decimal Degrees - Longitude first")]
            [GPEnumValue("DD(long/lat)")]
            value0,

            /// <summary>
            /// <para>Decimal Degrees - Latitude first</para>
            /// <para>Decimal Degrees - Latitude first—Decimal Degrees - Latitude first</para>
            /// <para>十进制度 - 纬度优先 - 十进制度 - 纬度优先</para>
            /// </summary>
            [Description("Decimal Degrees - Latitude first")]
            [GPEnumValue("DD(lat/long)")]
            value1,

            /// <summary>
            /// <para>Degrees Minutes Seconds - Longitude first</para>
            /// <para>Degrees Minutes Seconds - Longitude first—Degrees Minutes Seconds - Longitude first</para>
            /// <para>度 分 秒 - 经度 第一 - 度 分 秒 - 经度 在前</para>
            /// </summary>
            [Description("Degrees Minutes Seconds - Longitude first")]
            [GPEnumValue("DMS(long/lat)")]
            value2,

            /// <summary>
            /// <para>Degrees Minutes Seconds - Latitude first</para>
            /// <para>Degrees Minutes Seconds - Latitude first—Degrees Minutes Seconds - Latitude first</para>
            /// <para>度 分 秒 - 纬度 第一 - 度 分 秒 - 纬度 第一</para>
            /// </summary>
            [Description("Degrees Minutes Seconds - Latitude first")]
            [GPEnumValue("DMS(lat/long)")]
            value3,

            /// <summary>
            /// <para>Degrees Decimal Minutes - Longitude first</para>
            /// <para>Degrees Decimal Minutes - Longitude first—Degrees Decimal Minutes - Longitude first</para>
            /// <para>度十进制分钟 - 经度优先 - 度十进制分钟 - 经度优先</para>
            /// </summary>
            [Description("Degrees Decimal Minutes - Longitude first")]
            [GPEnumValue("DDM(long/lat)")]
            value4,

            /// <summary>
            /// <para>Degrees Decimal Minutes - Latitude first</para>
            /// <para>Degrees Decimal Minutes - Latitude first—Degrees Decimal Minutes - Latitude first</para>
            /// <para>十进制度分 - 纬度优先 - 度十进制分钟 - 纬度优先</para>
            /// </summary>
            [Description("Degrees Decimal Minutes - Latitude first")]
            [GPEnumValue("DDM(lat/long)")]
            value5,

            /// <summary>
            /// <para>Military Grid Reference System</para>
            /// <para>Military Grid Reference System—Military Grid Reference System notation</para>
            /// <para>军用格网参考系 - 军用格网参考系符号</para>
            /// </summary>
            [Description("Military Grid Reference System")]
            [GPEnumValue("MGRS")]
            _MGRS,

            /// <summary>
            /// <para>US National Grid</para>
            /// <para>US National Grid—US National Grid notation</para>
            /// <para>美国国家电网 - 美国国家电网表示法</para>
            /// </summary>
            [Description("US National Grid")]
            [GPEnumValue("USNG")]
            _USNG,

            /// <summary>
            /// <para>Universal Transverse Mercator</para>
            /// <para>Universal Transverse Mercator—Universal Transverse Mercator notation</para>
            /// <para>通用横轴墨卡托 - 通用横轴墨卡托符号</para>
            /// </summary>
            [Description("Universal Transverse Mercator")]
            [GPEnumValue("UTM")]
            _UTM,

        }

        /// <summary>
        /// <para>Coordinate Location</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinate Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_coordinate_string { get; set; }


        /// <summary>
        /// <para>Distance</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string? _input_search_distance { get; set; }


        /// <summary>
        /// <para>Input Search Expression</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Search Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _input_search_expression { get; set; } = null;


        /// <summary>
        /// <para>Output OIDs</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output OIDs")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_id_list { get; set; }


        public DistanceFromPoint SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}